/**
 * 页面统计内容
 * **/
import store from '@/store'
import Cookie from 'js-cookie'
// 保存用户页面停留日志
const saveUserResidenceLog = function (pageUrl) {
  if (window.timer) return
  // 停留时间超过1秒才记录
  window.timer = setTimeout(() => {
    window.timer = null
  }, 1000)
  const endTime = Date.now()
  const duration = endTime - window.pageViewStartTime
  const userInfo = store.getters.userInfo || {}
  if (JSON.stringify(userInfo) === '{}') return // 未登录不调用接口

  // ---------------------提交数据-------------------
  const params = { ...userInfo, duration }
  const url = process.env.VUE_APP_BASE_API + '/log/saveUserResidenceLog'
  const headers = new Headers()
  headers.append('content-type', 'application/json')
  headers.append('token', Cookie.get('token'))
  fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(params),
    // 重要！！！可让浏览器在页面卸载后在后台继续接管网络请求
    keepalive: true
  }).then(response => {
    console.log('响应', response.json())
  })
}

// 页面开始时间
window.pageViewStartTime = null
window.time = null // 节流

export const routerAfterFn = (to, from) => {
  // 在路由切换之后执行的逻辑 hash会触发两次，所以判断不为 '/'
  if (from?.path !== '/' && to !== from) {
    // console.log(`离开上个页面：${from.path} -> ${to.path}:`, 'userInfo')

    // 这里可以将停留时间保存到数据库或发送到服务器进行统计分析等操作
    saveUserResidenceLog(from.path)
  }
  window.pageViewStartTime = Date.now() // 初始化开始时间为当前时间
}

export const addVisibleChangeListener = () => {
  /**
   * 苹果safari浏览器页面关闭开启处理
   * pagehide 页面关闭
   * pageshow 页面显示
   */
  if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
    window.addEventListener('pagehide', function () {
      // 离开页面的时间戳
      const pageUrl = window.location.hash.split('#')[1]
      saveUserResidenceLog(pageUrl)
    })
    window.addEventListener('pageshow', function () {
      window.pageViewStartTime = Date.now() // 初始化开始时间为当前时间
    })
    return
  }
  /**
   * 一般浏览器页面关闭开启
   * visibilitychange 监听页面是否可见（切换tab，缩小浏览器，关闭浏览器等操作）
   */
  window.addEventListener('visibilitychange', function (e) {
    // console.error(e.target.visibilityState, document.visibilityState, 'rrr')
    if (e.target.visibilityState === 'hidden') {
      // 离开页面的时间戳
      const pageUrl = window.location.hash.split('#')[1]
      saveUserResidenceLog(pageUrl)
    } else {
      window.pageViewStartTime = Date.now() // 初始化开始时间为当前时间
      // console.log('重新访问页面', window.pageViewStartTime)
    }
  })
}
